package codeTopPractice;

/**
 * 给定一个数组，每个数字代表股票第i天的价格，设计算法返回最大利润
 */
public class 买卖股票最佳时机 {

    public static void main(String[] args) {

    }

    //该题实际上就是求最大的连续子数差值
    public static int maxProfit(int[] prices){
        //特判，数组长度小于等于1时无法产生盈利
        if(prices.length<=1){
            return 0;
        }
        //当前盈利
        int curr = 0;
        //最大盈利
        int max = 0;
        //因为要从第一天作为买入点算盈利，直接从数组下标1开始计算当天盈利：prices[i]-prices[i-1]
        int i = 1;
        while (i<prices.length){
            //若当前盈利加上新一天的盈利小于零，则表示不是最佳买入点
            if (prices[i]-prices[i-1]+curr<=0){
                //已算出当前盈利为负值，丢弃此次结果，盈利归零
                curr = 0;
                //买入点向后加一天
                i++;
            }else {
                //当天盈利加上当前总盈利大于零，则当前总盈利要加上当天盈利
                curr = curr+prices[i]-prices[i-1];
                //当前总盈利和最大盈利取最大
                max = max > curr ? max:curr;
                //跳到次日进入下次循环继续计算盈利
                i++;
            }
        }

        return max;
    }
}

